home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / linux / bootmem.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  4.7 KB  |  159 lines

  1. /*
  2.  * Discontiguous memory support, Kanoj Sarcar, SGI, Nov 1999
  3.  */
  4. #ifndef _LINUX_BOOTMEM_H
  5. #define _LINUX_BOOTMEM_H
  6.  
  7. #include <linux/mmzone.h>
  8. #include <asm/dma.h>
  9.  
  10. /*
  11.  *  simple boot-time physical memory area allocator.
  12.  */
  13.  
  14. extern unsigned long max_low_pfn;
  15. extern unsigned long min_low_pfn;
  16.  
  17. /*
  18.  * highest page
  19.  */
  20. extern unsigned long max_pfn;
  21.  
  22. #ifdef CONFIG_CRASH_DUMP
  23. extern unsigned long saved_max_pfn;
  24. #endif
  25.  
  26. /*
  27.  * node_bootmem_map is a map pointer - the bits represent all physical 
  28.  * memory pages (including holes) on the node.
  29.  */
  30. typedef struct bootmem_data {
  31.     unsigned long node_min_pfn;
  32.     unsigned long node_low_pfn;
  33.     void *node_bootmem_map;
  34.     unsigned long last_end_off;
  35.     unsigned long hint_idx;
  36.     struct list_head list;
  37. } bootmem_data_t;
  38.  
  39. extern bootmem_data_t bootmem_node_data[];
  40.  
  41. extern unsigned long bootmem_bootmap_pages(unsigned long);
  42.  
  43. extern unsigned long init_bootmem_node(pg_data_t *pgdat,
  44.                        unsigned long freepfn,
  45.                        unsigned long startpfn,
  46.                        unsigned long endpfn);
  47. extern unsigned long init_bootmem(unsigned long addr, unsigned long memend);
  48.  
  49. extern unsigned long free_all_bootmem_node(pg_data_t *pgdat);
  50. extern unsigned long free_all_bootmem(void);
  51.  
  52. extern void free_bootmem_node(pg_data_t *pgdat,
  53.                   unsigned long addr,
  54.                   unsigned long size);
  55. extern void free_bootmem(unsigned long addr, unsigned long size);
  56.  
  57. /*
  58.  * Flags for reserve_bootmem (also if CONFIG_HAVE_ARCH_BOOTMEM_NODE,
  59.  * the architecture-specific code should honor this).
  60.  *
  61.  * If flags is 0, then the return value is always 0 (success). If
  62.  * flags contains BOOTMEM_EXCLUSIVE, then -EBUSY is returned if the
  63.  * memory already was reserved.
  64.  */
  65. #define BOOTMEM_DEFAULT        0
  66. #define BOOTMEM_EXCLUSIVE    (1<<0)
  67.  
  68. extern int reserve_bootmem_node(pg_data_t *pgdat,
  69.                  unsigned long physaddr,
  70.                  unsigned long size,
  71.                  int flags);
  72. #ifndef CONFIG_HAVE_ARCH_BOOTMEM_NODE
  73. extern int reserve_bootmem(unsigned long addr, unsigned long size, int flags);
  74. #endif
  75.  
  76. extern void *__alloc_bootmem_nopanic(unsigned long size,
  77.                  unsigned long align,
  78.                  unsigned long goal);
  79. extern void *__alloc_bootmem(unsigned long size,
  80.                      unsigned long align,
  81.                      unsigned long goal);
  82. extern void *__alloc_bootmem_low(unsigned long size,
  83.                  unsigned long align,
  84.                  unsigned long goal);
  85. extern void *__alloc_bootmem_node(pg_data_t *pgdat,
  86.                   unsigned long size,
  87.                   unsigned long align,
  88.                   unsigned long goal);
  89. extern void *__alloc_bootmem_node_nopanic(pg_data_t *pgdat,
  90.                   unsigned long size,
  91.                   unsigned long align,
  92.                   unsigned long goal);
  93. extern void *__alloc_bootmem_low_node(pg_data_t *pgdat,
  94.                       unsigned long size,
  95.                       unsigned long align,
  96.                       unsigned long goal);
  97. #ifndef CONFIG_HAVE_ARCH_BOOTMEM_NODE
  98. #define alloc_bootmem(x) \
  99.     __alloc_bootmem(x, SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS))
  100. #define alloc_bootmem_nopanic(x) \
  101.     __alloc_bootmem_nopanic(x, SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS))
  102. #define alloc_bootmem_low(x) \
  103.     __alloc_bootmem_low(x, SMP_CACHE_BYTES, 0)
  104. #define alloc_bootmem_pages(x) \
  105.     __alloc_bootmem(x, PAGE_SIZE, __pa(MAX_DMA_ADDRESS))
  106. #define alloc_bootmem_pages_nopanic(x) \
  107.     __alloc_bootmem_nopanic(x, PAGE_SIZE, __pa(MAX_DMA_ADDRESS))
  108. #define alloc_bootmem_low_pages(x) \
  109.     __alloc_bootmem_low(x, PAGE_SIZE, 0)
  110. #define alloc_bootmem_node(pgdat, x) \
  111.     __alloc_bootmem_node(pgdat, x, SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS))
  112. #define alloc_bootmem_pages_node(pgdat, x) \
  113.     __alloc_bootmem_node(pgdat, x, PAGE_SIZE, __pa(MAX_DMA_ADDRESS))
  114. #define alloc_bootmem_low_pages_node(pgdat, x) \
  115.     __alloc_bootmem_low_node(pgdat, x, PAGE_SIZE, 0)
  116. #endif /* !CONFIG_HAVE_ARCH_BOOTMEM_NODE */
  117.  
  118. extern int reserve_bootmem_generic(unsigned long addr, unsigned long size,
  119.                    int flags);
  120.  
  121. extern void *alloc_bootmem_section(unsigned long size,
  122.                    unsigned long section_nr);
  123.  
  124. #ifdef CONFIG_HAVE_ARCH_ALLOC_REMAP
  125. extern void *alloc_remap(int nid, unsigned long size);
  126. #else
  127. static inline void *alloc_remap(int nid, unsigned long size)
  128. {
  129.     return NULL;
  130. }
  131. #endif /* CONFIG_HAVE_ARCH_ALLOC_REMAP */
  132.  
  133. extern unsigned long __meminitdata nr_kernel_pages;
  134. extern unsigned long __meminitdata nr_all_pages;
  135.  
  136. extern void *alloc_large_system_hash(const char *tablename,
  137.                      unsigned long bucketsize,
  138.                      unsigned long numentries,
  139.                      int scale,
  140.                      int flags,
  141.                      unsigned int *_hash_shift,
  142.                      unsigned int *_hash_mask,
  143.                      unsigned long limit);
  144.  
  145. #define HASH_EARLY    0x00000001    /* Allocating during early boot? */
  146.  
  147. /* Only NUMA needs hash distribution.
  148.  * IA64 and x86_64 have sufficient vmalloc space.
  149.  */
  150. #if defined(CONFIG_NUMA) && (defined(CONFIG_IA64) || defined(CONFIG_X86_64))
  151. #define HASHDIST_DEFAULT 1
  152. #else
  153. #define HASHDIST_DEFAULT 0
  154. #endif
  155. extern int hashdist;        /* Distribute hashes across NUMA nodes? */
  156.  
  157.  
  158. #endif /* _LINUX_BOOTMEM_H */
  159.